const fs = require("fs");
const path = require("path");
// fs.mkdir(path.resolve(__dirname, "a"), function (err) {
//   console.log(err);
// });

// fs.readdir(path.resolve(__dirname, "a"), function (err, dirs) {
//   console.log(dirs); // 只能读取子目录
//   dirs.forEach((fileOrDiretory) => {
//     fs.stat(
//       path.resolve(__dirname, "a", fileOrDiretory),
//       function (err, statObj) {
//         if (statObj.isDirectory()) {
//           fs.rmdir(path.resolve(__dirname, "a", fileOrDiretory), () => {});
//         } else {
//           fs.unlink(path.resolve(__dirname, "a", fileOrDiretory), () => {});
//         }
//       }
//     );
//   });
// });

// fs.rmdir(path.resolve(__dirname, "a"), function (err) {
//   console.log(err);
// });

// mkdir (rmdir unlink) stat access 同步判断文件是否存在 可以采用 existsSync

// function rmdirSync(directory) {
//   let dirs = fs.readdirSync(path.resolve(__dirname, directory));
//   dirs.forEach((dir) => {
//     dir = path.resolve(directory, dir);
//     let statObj = fs.statSync(dir);
//     if (statObj.isFile()) {
//       fs.unlinkSync(dir);
//     } else if (statObj.isDirectory()) {
//       rmdirSync(dir); // 递归删除
//     }
//   });
//   fs.rmdirSync(directory); // 等待子节点删除后 删除自己， 深度优先
// }
// rmdirSync("a");

// dom遍历 深度遍历，  层序遍历

// function rmdirSync(directory) {
//   let stack = [directory];
//   let idx = 0;
//   let currentDirectory;
//   while ((currentDirectory = stack[idx++])) {
//     let statObj = fs.statSync(currentDirectory);
//     if (statObj.isFile()) {
//       fs.unlinkSync(currentDirectory);
//     } else {
//       stack = [
//         ...stack,
//         ...fs
//           .readdirSync(currentDirectory)
//           .map((dir) => path.join(currentDirectory, dir)),
//       ];
//     }
//   }
//   let i = stack.length;
//   while (i--) {
//     fs.rmdirSync(stack[i]);
//   }
// }
// rmdirSync("a");

// 如何实现异步删除？ （串行，并行） ？
